package service;

import dao.AlunoDAO;
import dao.AlunoTurmaDAO;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.Aluno;
import modelo.AlunoTurma;
import modelo.Turma;
import util.FabricaDeObjetos;
import util.JPAUtil;

/**
 *
 * @author Abraao
 */
public class AlunoService {

    private static AlunoDAO alunoDAO;
    private static AlunoTurmaDAO alunoTurmaDAO;

    static {
        try {
            alunoDAO = (AlunoDAO) FabricaDeObjetos.getObjetoUnico(AlunoDAO.class);
            alunoTurmaDAO = (AlunoTurmaDAO) FabricaDeObjetos.getObjetoUnico(AlunoTurmaDAO.class);
        } catch (Exception ex) {
            Logger.getLogger(AlunoService.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List<Aluno> getTodos() {
        return alunoDAO.getAll();
    }

    public Aluno getPorId(Long id) {
        return alunoDAO.getPorId(id);
    }

    public List<Aluno> getPorNome(String nome) {
        return alunoDAO.getPorNome(nome);
    }

    public void inserir(Aluno aluno) {
        JPAUtil.beginTransaction();

        aluno.setAdministrador(false);
        alunoDAO.persist(aluno);

        JPAUtil.commitTransaction();
    }

    public void removerAluno(Aluno aluno) {
        JPAUtil.beginTransaction();
        Aluno aluno1 = alunoDAO.getPorId(aluno.getId());
        List<AlunoTurma> listaAlunoTurma = alunoTurmaDAO.getPorAluno(aluno1);
        for (AlunoTurma alunoTurma : listaAlunoTurma) {
            alunoTurmaDAO.remove(alunoTurma);
        }
        alunoDAO.remove(aluno1);
        JPAUtil.commitTransaction();
    }

    public void setAlteracao(Aluno alunoMod) {
        JPAUtil.beginTransaction();
        
        alunoDAO.merge(alunoMod);
        
        JPAUtil.commitTransaction();
    }

    public Aluno getPorIdComListaAlunoTurmas(Long id) {
        return alunoDAO.getPorIdComListaAlunoTurmas(id);
    }

    public List<Aluno> getDisponiveisPorTurma(Turma turmaCorrente) {
        return alunoDAO.getDisponiveisPorTurma(turmaCorrente);
    }
}
